Description:
前兩篇講解了 SQLite 語法並將之實作成 Swift code 後,本篇為整個 App 的實作也是這系列的最後一篇。
此 demo 透過兩個 TextField 來讓使用者輸入名字和身高並將輸入的資料用 TableView 呈現,點選每個欄位可以更新資料或是刪除。
Component:
Highlight function:
建立及開啟名為 sqlite3.db 之資料庫檔案,裡面有包含一張名為 UserInfoTable 之表單。該表單內含三個 columns(id, name, height)。
let dbTableName: String = "UserInfoTable"
...
override func viewDidLoad() {
...
let destinationUrl = getDirectoryPath().appendingPathComponent("sqlite3.db")
db = Sqlite(path: destinationUrl.absoluteString)
if db != nil {
let dbStatus = db!.createTable(dbTableName,
columnsInfo: ["id integer primary key autoincrement", "name text", "height double"])
}
...
func getDirectoryPath() -> URL {
// create document folder url
let fileDirectoryURL = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask).first!
return fileDirectoryURL
}
...
}
在將資料讀取並顯示在 TableView 中時由於資料庫表單內不只含一筆資料,須透過回傳之 statement 來判斷是否是該 SQL 語法執行後回傳的最後一筆資料。而將每筆資料中不同 column 取出的方法是透過呼叫 sqlite3_column()。
func fetchData(offset: Int) {
let statement = db!.fetch("UserInfoTable", cond: nil, sortBy: nil, offset: offset)
var fetchResult: [UserInfo] = [UserInfo]()
while sqlite3_step(statement) == SQLITE_ROW {
let id = sqlite3_column_int(statement, 0)
let name = String(cString: sqlite3_column_text(statement, 1))
let height = sqlite3_column_double(statement, 2)
fetchResult.append(UserInfo.init(id: id, name: name, height: height))
}
...
}
Reference:
Source code on Github